﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace ADShop.Models
{
    public class ShoppingCartItems
    {
        /// <summary>
        /// Mã sản phẩm
        /// </summary>
        public int ProductID { get; set; }
        /// <summary>
        /// Tên sản phẩm
        /// </summary>
        public string ProductName { get; set; }
        //Điểm thưởng
        public int Reward { get; set; }
        //Ảnh của sản phẩm
        public string ProductImages { get; set; }
        public int Quantity { get; set; }
        //Số lượng mỗi sản phẩm mua
        public decimal Price { get; set; }
        //Tổng tiền của từng sản phẩm
        public decimal TotalPrice { get; set; }
    }
    public class ShoppingCart
    {
        #region "Variable"
        int _percentVoucher;

        public int PercentVoucher
        {
            get { return _percentVoucher; }
            set { _percentVoucher = value; }
        }
        #endregion
        public ShoppingCart()
        {
            ListShoppingCartItems = new List<ShoppingCartItems>();
            PercentVoucher = 0;
        }

        public List<ShoppingCartItems> ListShoppingCartItems { get; set; }

        [ValidateAntiForgeryToken]
        /// <summary>
        /// Phương thức thêm hàng vào giỏ
        /// </summary>
        /// <param name="items">Sản phẩm cần thêm vào</param>
        /// <returns>
        /// Trả về true nếu thêm hàng vào giỏ hàng thành công
        /// Trả về false nếu thêm hàng vào giỏ hàng thất bại
        /// </returns>
        public bool AddToCart(ShoppingCartItems items)
        {
            bool alreadyExists = ListShoppingCartItems.Any(d => d.ProductID == items.ProductID);
            if (alreadyExists)
            {
                ShoppingCartItems alreadItems = ListShoppingCartItems.Where(d => d.ProductID == items.ProductID).SingleOrDefault();
                if (alreadItems != null)
                {
                    alreadItems.Quantity = alreadItems.Quantity + 1;
                    alreadItems.TotalPrice = alreadItems.Quantity * alreadItems.Price;

                }
            }
            else
            {
                ListShoppingCartItems.Add(items);
            }
            return true;
        }

        /// <summary>
        /// Phương thức xóa một sản phẩm khỏi giỏ hàng
        /// </summary>
        /// <param name="items">Đối tượng sản phẩm truyền vào</param>
        /// <returns>Trả về true nếu xóa đối tượng thành công
        /// Trả về false nếu xóa đối tượng thất bại khỏi giỏ hàng
        /// </returns>
        public bool RemoveFromCart(int lngProductSellID)
        {
            ShoppingCartItems existsItem = ListShoppingCartItems.Where(x => x.ProductID == lngProductSellID).SingleOrDefault();
            if (existsItem != null)
            {
                ListShoppingCartItems.Remove(existsItem);
            }
            return true;
        }

        /// <summary>
        /// Phương thức dùng để cập nhật giỏ hàng
        /// </summary>
        /// <param name="items">Đối tượng sản phẩm cần cập nhật</param>
        /// <param name="Quantity">Số lượng cần cập nhật</param>
        /// <returns>
        /// Trả về true nếu cập nhật giỏ hàng thành công
        /// Trả về false nếu cập nhật thất bại
        /// </returns>

        public bool UpdateQuantity(int lngProductSellID, int intQuantity)
        {
            ShoppingCartItems existsItem = ListShoppingCartItems.Where(x => x.ProductID == lngProductSellID).SingleOrDefault();
            if (existsItem != null)
            {
                existsItem.Quantity = intQuantity;
                existsItem.TotalPrice = existsItem.Quantity * existsItem.Price;
            }
            return true;
        }

        /// <summary>
        /// Hàm lấy tổng tiển của đơn hàng .
        /// </summary>
        /// <returns></returns>
        public decimal GetTotal()
        {
            if (PercentVoucher > 0)
            {
                return ListShoppingCartItems.Sum(x => x.TotalPrice) == null ? 0 : (this.ListShoppingCartItems.Sum(x => x.TotalPrice) * PercentVoucher) / 100;
            }
            return ListShoppingCartItems.Sum(x => x.TotalPrice) == null ? 0 : this.ListShoppingCartItems.Sum(x => x.TotalPrice);
        }

        public bool EmptyCart()
        {
            ListShoppingCartItems.Clear();
            return true;
        }
    }
}